/*
*********************************************************************************************************
*                                            EXAMPLE CODE
*
*               This file is provided as an example on how to use Micrium products.
*
*               Please feel free to use any application code labeled as 'EXAMPLE CODE' in
*               your application products.  Example code may be used as is, in whole or in
*               part, or may be used as a reference only. This file can be modified as
*               required to meet the end-product requirements.
*
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                 HTTP CLIENT SOUNDCLOUD SOURCE CODE
*
* Filename : soundcloud.h
* Version  : V3.01.00
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*********************************************************************************************************
*                                               MODULE
*********************************************************************************************************
*********************************************************************************************************
*/

#ifndef  SOUNDCLOUD_MODULE_PRESENT
#define  SOUNDCLOUD_MODULE_PRESENT


/*
*********************************************************************************************************
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*********************************************************************************************************
*/

#include  <Client/Source/http-c.h>


/*
*********************************************************************************************************
*********************************************************************************************************
*                                               EXTERNS
*********************************************************************************************************
*********************************************************************************************************
*/

#ifdef   SOUNDCLOUD_MODULE
#define  SOUNDCLOUD_EXT
#else
#define  SOUNDCLOUD_EXT  extern
#endif


/*
*********************************************************************************************************
*********************************************************************************************************
*                                        DEFAULT CONFIGURATION
*********************************************************************************************************
*********************************************************************************************************
*/

void          SoundCloudTask_Init                      (void );

void          SoundCloudTask                           (void            *p_data);


typedef struct stream_buffer {
  CPU_INT08U *WrAddress;
  CPU_INT08U *Start;
  CPU_BOOLEAN DecodingStarted;
  void *p_msg;
} STREAM_BUFFER;


/*
*********************************************************************************************************
*********************************************************************************************************
*                                               DEFINES
*********************************************************************************************************
*********************************************************************************************************
*/



#define  SOUNDCLOUD_CFG_REQ_NBR_MAX                        2u

#define  SOUNDCLOUD_CFG_CONN_NBR_MAX                       3u
#define  SOUNDCLOUD_CFG_CONN_BUF_SIZE                   5*1460u

#define  SOUNDCLOUD_CFG_HDR_NBR_MAX                       10u
#define  SOUNDCLOUD_CFG_HDR_VAL_LEN_MAX                  300u

#define  SOUNDCLOUD_URL_LEN_MAX                          100u

#define  SOUNDCLOUD_CONN_RETRY_MAX                       5


#define  SOUNDCLOUD_API_HOSTNAME                   "api.soundcloud.com"

#define  SOUNDCLOUD_URL_TRACKS                     "/tracks/"

/*
*********************************************************************************************************
*********************************************************************************************************
*                                          GLOBAL VARIABLES
*********************************************************************************************************
*********************************************************************************************************
*/

SOUNDCLOUD_EXT   CPU_INT16U            SoundCloud_Buf[40];

SOUNDCLOUD_EXT   STREAM_BUFFER         stream_buff;

SOUNDCLOUD_EXT   HTTPc_CONN_OBJ        SoundCloud_ConnTbl[SOUNDCLOUD_CFG_CONN_NBR_MAX];
SOUNDCLOUD_EXT   HTTPc_REQ_OBJ         SoundCloud_ReqTbl[SOUNDCLOUD_CFG_REQ_NBR_MAX];
SOUNDCLOUD_EXT   HTTPc_RESP_OBJ        SoundCloud_RespTbl[SOUNDCLOUD_CFG_REQ_NBR_MAX];

/*
*********************************************************************************************************
*********************************************************************************************************
*                                         FUNCTION PROTOTYPES
*********************************************************************************************************
*********************************************************************************************************
*/


CPU_BOOLEAN SoundCloud_GetStream      (CPU_CHAR           *p_url);

CPU_BOOLEAN SoundCloud_PlayStream     (CPU_CHAR           *p_host,
                                       CPU_CHAR           *p_url,
                                       CPU_CHAR           *p_buf);

CPU_INT32U  SoundCloud_MP3Decode      (void );

void        SoundCloud_PlaytTrack     (CPU_CHAR           *track_id,
                                       CPU_CHAR           *client_id);

/*
*********************************************************************************************************
*********************************************************************************************************
*                                             MODULE END
*********************************************************************************************************
*********************************************************************************************************
*/

#endif  /* SOUNDCLOUD_MODULE_PRESENT */
